package 力扣题库;

public class p7整数反转 {

    public static void main(String[] args) {
        System.out.println(reverse1(-123));
    }

    public static int reverse2(int x) {
        //传入的参数为10位时，第一位只能为 1 或 2 ，因此反转后的第10位不可能大于7 ，
        //因此只用判断前9位，当等于Integer.MAX_VALUE/10 时，第十位不会溢出
        //前9位小于Integer.MAX_VALUE/10 时，第十位不会溢出
        //前9位大于Integer.MAX_VALUE/10 时，已经溢出
        int res=0;
        while (x!=0) {
            //判断是否 溢出 ，借用 Integer
            //Integer.MAX_VALUE表示int数据类型的最大取值数：2 147 483 647
            //Integer.MIN_VALUE表示int数据类型的最小取值数：-2 147 483 648
            int tmp=x%10;
            x/=10;
            if (res>Integer.MAX_VALUE/10  || res<Integer.MIN_VALUE/10) {
                return 0;
            }

            res=res*10+tmp;
        }
        return res;
    }


    public static int reverse1(int x) {
        //判断溢出那里考虑不足，传入10位的参数不会溢出，即第一位只能为1或2，反转后的第10位不可能大于7

        int res=0;
        while (x!=0) {
            int tmp=x%10;
            x/=10;

            //判断是否上溢出，多余：是否大于  2^31 − 1
            if(res>214748364 ||res==214748364  && tmp>7) {
                return 0;
            }
            //判断是否下溢出，多余：是否小于  −2^31
            if (res<-214748364  || res==-214748364 && tmp>8) {
                return 0;
            }

            res=res*10+tmp;
        }
        return res;
    }
}
